library(tidyverse)
library(sf)
library(ggplot2)
library(scales)
library(ggmap)
escuelas <- read_csv('data/establecimientos_educativos_WGS84.csv')
summary(escuelas)
## cui cueanexo cue anexo
## Min. :200001 Min. :20000100 Min. :200001 Min. : 0.000
## 1st Qu.:200455 1st Qu.:20084300 1st Qu.:200843 1st Qu.: 0.000
## Median :200901 Median :20159822 Median :201598 Median : 0.000
## Mean :201110 Mean :20184427 Mean :201844 Mean : 3.253
## 3rd Qu.:201716 3rd Qu.:20240100 3rd Qu.:202401 3rd Qu.: 0.000
## Max. :202731 Max. :29003001 Max. :290030 Max. :99.000
## sector dom_edific dom_establ nombre_est
## Min. :1.000 Length:2973 Length:2973 Length:2973
## 1st Qu.:1.000 Class :character Class :character Class :character
## Median :1.000 Mode :character Mode :character Mode :character
## Mean :1.363
## 3rd Qu.:2.000
## Max. :2.000
## nombre_abr telefono email codpost
## Length:2973 Length:2973 Length:2973 Length:2973
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## web_megcba nivmod nivelmodal tipest_abr
## Length:2973 Length:2973 Length:2973 Length:2973
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## tipest depfun depfun_otr de
## Length:2973 Length:2973 Length:2973 Min. : 1.000
## Class :character Class :character Class :character 1st Qu.: 4.000
## Mode :character Mode :character Mode :character Median : 9.000
## Mean : 9.637
## 3rd Qu.:15.000
## Max. :21.000
## comuna barrio area_progr estado
## Min. : 1.000 Length:2973 Length:2973 Min. :1.000
## 1st Qu.: 4.000 Class :character Class :character 1st Qu.:1.000
## Median : 8.000 Mode :character Mode :character Median :1.000
## Mean : 7.654 Mean :1.155
## 3rd Qu.:11.000 3rd Qu.:1.000
## Max. :15.000 Max. :4.000
## point_x point_y nivel
## Min. : 93958 Min. : 92910 Length:2973
## 1st Qu.: 98888 1st Qu.: 99347 Class :character
## Median :101998 Median :101691 Mode :character
## Mean :102033 Mean :101708
## 3rd Qu.:105320 3rd Qu.:104019
## Max. :110324 Max. :110326
dim(escuelas)
## [1] 2973 27
2973 registros, 27 columnas.
colnames(escuelas)
## [1] "cui" "cueanexo" "cue" "anexo" "sector"
## [6] "dom_edific" "dom_establ" "nombre_est" "nombre_abr" "telefono"
## [11] "email" "codpost" "web_megcba" "nivmod" "nivelmodal"
## [16] "tipest_abr" "tipest" "depfun" "depfun_otr" "de"
## [21] "comuna" "barrio" "area_progr" "estado" "point_x"
## [26] "point_y" "nivel"
Dejo las columnas con las que me voy a quedar
escuelas <- escuelas %>%
select(cue,nombre_abr,depfun,de,comuna,barrio)
summary(escuelas)
## cue nombre_abr depfun de
## Min. :200001 Length:2973 Length:2973 Min. : 1.000
## 1st Qu.:200843 Class :character Class :character 1st Qu.: 4.000
## Median :201598 Mode :character Mode :character Median : 9.000
## Mean :201844 Mean : 9.637
## 3rd Qu.:202401 3rd Qu.:15.000
## Max. :290030 Max. :21.000
## comuna barrio
## Min. : 1.000 Length:2973
## 1st Qu.: 4.000 Class :character
## Median : 8.000 Mode :character
## Mean : 7.654
## 3rd Qu.:11.000
## Max. :15.000
table(escuelas$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de Educación Técnica Superior
## 2
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
## Dirección General Escuela de Maestros
## 5
## Gerencia Operativa de Educación para el Desarrollo
## 53
## Gerencia Operativa de Formación Profesional
## 113
## Gerencia Operativa Gestión y Administración de Institutos de Formación Docente
## 6
## GO de Formación Laboral
## 1
## Subsecretaría de Coordinación Pedagógica y Equidad Educativa
## 86
Voy a quitar las dependencias funcionales con menos de 10 establecimientos
Para ello tengo que agrupar y contar.
Luego ordeno por dependencia funcional en orden descendente.
escuelas_agrup_depfun <- escuelas %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(-cantidad)
print(escuelas_agrup_depfun)
## # A tibble: 18 × 2
## depfun cantidad
## <chr> <int>
## 1 Dirección General de Educación de Gestión Privada 1055
## 2 Dirección de Educación Primaria 503
## 3 Dirección de Educación Inicial 432
## 4 Dirección de Educación del Adulto y del Adolescente 367
## 5 Gerencia Operativa de Formación Profesional 113
## 6 Dirección de Educación Media 106
## 7 Subsecretaría de Coordinación Pedagógica y Equidad Educativa 86
## 8 Dirección de Educación Artística 57
## 9 Dirección de Educación Especial 54
## 10 Gerencia Operativa de Educación para el Desarrollo 53
## 11 Dirección de Educación Técnica 39
## 12 Dirección de EducaciónTécnica Superior 38
## 13 <NA> 34
## 14 Dirección de Escuelas Normales Superiores 22
## 15 Gerencia Operativa Gestión y Administración de Institutos de Formac… 6
## 16 Dirección General Escuela de Maestros 5
## 17 Dirección de Educación Técnica Superior 2
## 18 GO de Formación Laboral 1
dep_funcs_chicas <- escuelas_agrup_depfun %>%
filter(cantidad < 10)
print(dep_funcs_chicas)
## # A tibble: 4 × 2
## depfun cantidad
## <chr> <int>
## 1 Gerencia Operativa Gestión y Administración de Institutos de Formaci… 6
## 2 Dirección General Escuela de Maestros 5
## 3 Dirección de Educación Técnica Superior 2
## 4 GO de Formación Laboral 1
Quiero eliminar de la base escuelas las que corresponden a estas dependencias funcionales.
Para ello construyo una lista de las dependencias funcionales chicas
lista_dep_funcs_chicas <- dep_funcs_chicas$depfun
lista_dep_funcs_chicas
## [1] "Gerencia Operativa Gestión y Administración de Institutos de Formación Docente"
## [2] "Dirección General Escuela de Maestros"
## [3] "Dirección de Educación Técnica Superior"
## [4] "GO de Formación Laboral"
Ahora quito de la base esas escuelas
escuelas <- escuelas %>%
filter(!(depfun %in% lista_dep_funcs_chicas))
Chequeo que ya no estén.
table(escuelas$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
## Gerencia Operativa de Educación para el Desarrollo
## 53
## Gerencia Operativa de Formación Profesional
## 113
## Subsecretaría de Coordinación Pedagógica y Equidad Educativa
## 86
Veo que todas son mayores a 10.
any(is.na(escuelas$depfun))
## [1] TRUE
escuelas <- drop_na(escuelas)
ggplot(escuelas, aes(y = factor(depfun)))+
geom_bar(fill = "steelblue", color = "black", stat = "count") +
labs(title = "Establecimientos por Dependencia Funcional", y = "Dependencia funcional", x = "Cantidad")
Y me quedo solo con las que contienen la palabra “Dirección”
escuelas_direcciones <- escuelas %>%
filter(grepl("Dirección",depfun))
table(escuelas_direcciones$depfun)
##
## Dirección de Educación Artística
## 57
## Dirección de Educación del Adulto y del Adolescente
## 367
## Dirección de Educación Especial
## 54
## Dirección de Educación Inicial
## 432
## Dirección de Educación Media
## 106
## Dirección de Educación Primaria
## 503
## Dirección de Educación Técnica
## 39
## Dirección de EducaciónTécnica Superior
## 38
## Dirección de Escuelas Normales Superiores
## 22
## Dirección General de Educación de Gestión Privada
## 1055
Para conocer las proporciones de escuelas por Dirección.
escuelas_estatales_privadas <- escuelas_direcciones %>%
mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privadas',
.default = 'Estatales')) %>%
group_by(est_priv) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct
escuelas_estatales_privadas
## # A tibble: 2 × 4
## est_priv cantidad pct lab.ypos
## <chr> <int> <dbl> <dbl>
## 1 Privadas 1055 39.5 19.7
## 2 Estatales 1618 60.5 69.7
ggplot(escuelas_estatales_privadas, aes(x = "", y=pct, fill = est_priv))+
geom_bar(width=1, stat = 'identity', color = 'white')+
coord_polar('y',start=0)+
geom_text(aes(y=lab.ypos, label = percent(pct, scale = 1, accuracy = 0.01)), color='white')+
theme_void()+
labs(title = "Porcentaje de establecimientos de gestión Estatal/Privada", fill = "Estatales/Privados")
Me quedo sólo con las de gestión estatal para calcular porcentajes entre primarias, iniciales, medias, etc.
escuelas_estatales <- escuelas_direcciones %>%
filter(depfun != "Dirección General de Educación de Gestión Privada") %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2),
lab.ypos = cumsum(pct) - 0.5*pct) #Esto es para acomodar etiquetas de pct
escuelas_estatales
## # A tibble: 9 × 4
## depfun cantidad pct lab.ypos
## <chr> <int> <dbl> <dbl>
## 1 Dirección de Escuelas Normales Superiores 22 1.36 0.68
## 2 Dirección de EducaciónTécnica Superior 38 2.35 2.54
## 3 Dirección de Educación Técnica 39 2.41 4.92
## 4 Dirección de Educación Especial 54 3.34 7.79
## 5 Dirección de Educación Artística 57 3.52 11.2
## 6 Dirección de Educación Media 106 6.55 16.3
## 7 Dirección de Educación del Adulto y del Adolescente 367 22.7 30.9
## 8 Dirección de Educación Inicial 432 26.7 55.6
## 9 Dirección de Educación Primaria 503 31.1 84.5
Voy a dejar en la categoría “Otra” a las dependencias funcionales con menos de 100 escuelas.
escuelas_estatales <- escuelas_direcciones %>%
filter(depfun != "Dirección General de Educación de Gestión Privada") %>%
mutate(depfun = case_when(depfun == 'Dirección de Escuelas Normales Superiores' ~ 'Otra DF',
depfun == 'Dirección de EducaciónTécnica Superior' ~ 'Otra DF',
depfun == 'Dirección de Educación Técnica' ~ 'Otra DF',
depfun == 'Dirección de Educación Especial' ~ 'Otra DF',
depfun == 'Dirección de Educación Artística' ~ 'Otra DF',
.default = depfun)) %>%
group_by(depfun) %>%
summarise(cantidad = n()) %>%
arrange(cantidad) %>%
mutate (pct = round((cantidad / sum(cantidad))*100,digits=2)) %>%
mutate (lab.ypos = cumsum(pct) - 0.5*pct) %>% #Esto es para acomodar etiquetas de pct+
mutate(legend_labs = paste0(depfun, " (",pct, "%)"))
escuelas_estatales
## # A tibble: 5 × 5
## depfun cantidad pct lab.ypos legend_labs
## <chr> <int> <dbl> <dbl> <chr>
## 1 Dirección de Educación Media 106 6.55 3.28 Dirección …
## 2 Otra DF 210 13.0 13.0 Otra DF (1…
## 3 Dirección de Educación del Adulto y del A… 367 22.7 30.9 Dirección …
## 4 Dirección de Educación Inicial 432 26.7 55.6 Dirección …
## 5 Dirección de Educación Primaria 503 31.1 84.5 Dirección …
ggplot(escuelas_estatales, aes(x = 2, y = pct, fill = legend_labs)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0, direction = -1)+
geom_text(aes(label = percent(pct, scale = 1, accuracy = 0.01) ), size=3, position=position_stack(vjust=0.5))+
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Porcentaje de establecimientos de gestión Estatal por Dependencia Funcional", fill = "Dependencia Funcional")
Voy a graficar con puntos la distribución de las escuelas en CABA.
Levanto el dataset de establecimientos educativos (ahora desde el geojson) para tener las coordenadas.
Además, levanto el geojson de las comunas de CABA.
escuelas_caba <- st_read("data/establecimientos_educativos_WGS84.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Reading layer `establecimientos_educativos_WGS84' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/establecimientos_educativos_WGS84.geojson'
## using driver `GeoJSON'
## Simple feature collection with 2973 features and 27 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.52918 ymin: -34.69318 xmax: -58.35072 ymax: -34.53619
## Geodetic CRS: WGS 84
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
comunas_caba <- comunas_caba %>%
mutate(comuna = COMUNAS)
dim(comunas_caba)
## [1] 15 8
Me quedo sólo con las correspondientes a alguna Dirección (quito gerencias)
escuelas_caba <- escuelas_caba %>%
filter(grepl("Dirección",depfun))
ggplot()+
geom_sf(data=comunas_caba)+
geom_sf(data=escuelas_caba, aes(color=depfun), alpha=0.3)+
labs(color="Dependencia Funcional")+
theme_minimal()+
labs(title="Escuelas en CABA por Dependencia Funcional")
cant_escuelas_comunas <- escuelas_direcciones %>%
group_by(comuna) %>%
summarise(cantidad = n()) %>%
select(comuna,cantidad)
Al dataset de comunas le uno el de cantidad de escuelas
comunas_caba <- left_join(comunas_caba,cant_escuelas_comunas, by="comuna")
ggplot(data = comunas_caba,
aes(x = factor(comuna), y = cantidad, fill=cantidad))+
geom_col(colour = 'black',
alpha = 0.7)+
scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
labs (title = "Cantidad de escuelas por Comuna",
x = "Comunas",
y = "Cantidad de escuelas")+
geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
theme_minimal()+
coord_flip() #Roto el gráfico para que quede horizontal
ggplot()+
geom_sf(data=comunas_caba, aes(fill=cantidad))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+ #El direction 1 da vuelta la paleta de colores
labs(title="Cantidad de escuelas por Comuna",
fill="")
escuelas_estatales_privadas <- escuelas_caba %>%
mutate(est_priv = case_when(depfun == "Dirección General de Educación de Gestión Privada" ~ 'Privada',
.default = 'Estatal'))
bbox_caba <- st_bbox(comunas_caba)
print(bbox_caba)
## xmin ymin xmax ymax
## -58.53152 -34.70529 -58.33515 -34.52649
#Paso a numéricos el bbox
bbox_caba <- as.numeric(bbox_caba)
mapa_caba <- get_stamenmap(bbox = as.numeric(bbox_caba), #Repito pero no hace falta
maptype = "terrain", #Estilo de mapa
zoom=13)
ggmap(mapa_caba)+
geom_sf(data=comunas_caba, inherit.aes=FALSE)+
geom_sf(data=escuelas_estatales_privadas, aes(color=est_priv),inherit.aes=FALSE, alpha=0.3)+
labs(color="Gestión")+
theme_minimal()+
labs(title="Escuelas en CABA según gestión Estatal/Privada")
Voy a facetar el mapa según escuelas de gestión Estatal o Privada para verlo con más claridad
ggmap(mapa_caba)+
geom_sf(data=comunas_caba, inherit.aes=FALSE)+
geom_sf(data=escuelas_estatales_privadas, aes(x = st_coordinates(geometry)[,1], y = st_coordinates(geometry)[,2]), inherit.aes=FALSE)+
facet_wrap(~est_priv)
Filtro para quedarme con sólo las escuelas con dependencia funcional “Dirección General de Educación de Gestión Privada”
escuelas_privadas_por_comuna <- escuelas %>%
filter(depfun == "Dirección General de Educación de Gestión Privada") %>%
group_by(comuna) %>%
summarise(cantidad = n()) %>%
arrange(-cantidad)
escuelas_privadas_por_comuna
## # A tibble: 15 × 2
## comuna cantidad
## <dbl> <int>
## 1 13 120
## 2 1 113
## 3 3 84
## 4 14 84
## 5 5 81
## 6 6 76
## 7 2 73
## 8 12 71
## 9 7 65
## 10 11 63
## 11 15 63
## 12 4 52
## 13 10 44
## 14 9 35
## 15 8 31
ggplot(data = escuelas_privadas_por_comuna,
aes(x = factor(comuna), y = cantidad, fill=cantidad))+
geom_col(colour = 'black',
alpha = 0.7)+
scale_fill_gradient(low = "#e5f5e0", high = "#31a354")+
labs (title = "Cantidad de escuelas privadas por Comuna",
x = "Comunas",
y = "Cantidad de escuelas")+
geom_text(aes(label = cantidad), hjust = -0.1)+ # Muestra los números sobre las barras
theme_minimal()+
coord_flip() #Roto el gráfico para que quede horizontal
A comunas_caba le tengo que joinear el escuelas_privadas_por_comuna
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1")
## options: ENCODING=latin1
## Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL
## Message 6: driver GeoJSON does not support open option ENCODING
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
comunas_caba <- comunas_caba %>%
mutate(comuna = COMUNAS)
escuelas_privadas_por_comuna <- left_join(comunas_caba,escuelas_privadas_por_comuna, by="comuna")
ggplot()+
geom_sf(data=escuelas_privadas_por_comuna, aes(fill=cantidad))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+
labs(title="Cantidad de escuelas privadas por Comuna",
fill="")
censo_2010 <- read.csv('data/partidos_censo2010.csv')
summary(censo_2010)
## codigo nombre pob_2010 viv_2010
## Min. :2001 Length:48 Min. : 56729 Min. : 19287
## 1st Qu.:2013 Class :character 1st Qu.: 174013 1st Qu.: 64864
## Median :6319 Mode :character Median : 223280 Median : 93388
## Mean :5075 Mean : 301108 Mean :104104
## 3rd Qu.:6544 3rd Qu.: 340722 3rd Qu.:123359
## Max. :6861 Max. :1775816 Max. :447306
## hog_2010
## Min. : 17116
## 1st Qu.: 59537
## Median : 81055
## Mean : 95612
## 3rd Qu.:109566
## Max. :484909
Chequeo nombres de columnas
colnames(censo_2010)
## [1] "codigo" "nombre" "pob_2010" "viv_2010" "hog_2010"
Veo qué valores tiene la columna nombre
table(censo_2010$nombre)
##
## Almirante Brown Avellaneda Berazategui
## 1 1 1
## Berisso Comuna 1 Comuna 10
## 1 1 1
## Comuna 11 Comuna 12 Comuna 13
## 1 1 1
## Comuna 14 Comuna 15 Comuna 2
## 1 1 1
## Comuna 3 Comuna 4 Comuna 5
## 1 1 1
## Comuna 6 Comuna 7 Comuna 8
## 1 1 1
## Comuna 9 Ensenada Escobar
## 1 1 1
## Esteban Echeverr\xeda Ezeiza Florencio Varela
## 1 1 1
## General Rodr\xedguez General San Mart\xedn Hurlingham
## 1 1 1
## Ituzaing\xf3 Jos\xe9 C. Paz La Matanza
## 1 1 1
## La Plata Lan\xfas Lomas de Zamora
## 1 1 1
## Luj\xe1n Malvinas Argentinas Merlo
## 1 1 1
## Moreno Mor\xf3n Pilar
## 1 1 1
## Presidente Per\xf3n Quilmes San Fernando
## 1 1 1
## San Isidro San Miguel San Vicente
## 1 1 1
## Tigre Tres de Febrero Vicente L\xf3pez
## 1 1 1
Filtro solo los datos de CABA
Para ello voy a seleccionar sólo las que contienen la palabra “Comuna”
censo_2010_CABA <- censo_2010 %>%
filter(str_detect(nombre, "Comuna"))
Genero una columna Comuna
En la misma sólo voy a poner el número de la comuna para poder joinear
Tengo que castear a double porque sino queda como character
censo_2010_CABA_comunas <- censo_2010_CABA %>%
mutate(comuna = as.double(str_remove(nombre, "Comuna ")))
Joineo censo con base de escuelas
comunas_caba <- left_join(comunas_caba, censo_2010_CABA_comunas, by="comuna")
comunas_caba <- left_join(comunas_caba, cant_escuelas_comunas, by="comuna")
Calculo escuelas por cantidad de poblacion
En base a los datos del censo de 2010, por cada 1000 habitantes y cada 1000 viviendas.
escuelas_poblacion <- comunas_caba %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000),
escuelas_por_1000_viv = cantidad/(viv_2010/1000)) %>%
arrange(-escuelas_por_1000_hab)
escuelas_poblacion <- escuelas_poblacion %>%
arrange(comuna)
ggplot(escuelas_poblacion, aes(x = escuelas_por_1000_hab, y = reorder(nombre,comuna))) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(x = "Escuelas por cada 1000 habitantes", y = "Comuna") +
ggtitle("Escuelas por cada 1000 habitantes por Comuna")
escuelas_priv_agrup_comuna_censo <-
left_join(escuelas_privadas_por_comuna,censo_2010_CABA_comunas,by="comuna") %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000)) %>%
arrange(-escuelas_por_1000_hab)
ggplot(escuelas_priv_agrup_comuna_censo, aes(y = reorder(nombre,comuna))) +
geom_bar(aes(x = escuelas_por_1000_hab), stat = "identity", position = "dodge") +
labs(x = "Cantidad de escuelas privadas por cada 1000 habitantes", y = "Comunas") +
ggtitle("Cantidad de escuelas privadas por habitantes por Comuna")
Voy a generar un facetado para ver en dos mapas coropléticos la relación entre cantidad de escuelas de gestión estatal y de gestión privada por comuna.
Para ello tengo que generar un dataset que contenga, por cada comuna, la cantidad de escuelas privadas y la cantidad de escuelas estatales por cada 1000 habitantes.
Tengo los datos:
censo_2010_CABA_comunas
escuelas_estatales_privadas
cant_escuelas_est_priv_comunas <- escuelas_estatales_privadas %>%
group_by(comuna,est_priv) %>%
summarise(cantidad = n())
A esto le tengo que joinear la base de censo_2010 para luego calcular la relación
cant_escuelas_est_priv_comunas <- left_join(cant_escuelas_est_priv_comunas,
censo_2010_CABA_comunas,
by="comuna")
Ahora le agrego una columna para calcular la relación entre cantidad de escuelas y cantidad de habitantes
cant_escuelas_est_priv_comunas <- cant_escuelas_est_priv_comunas %>%
mutate(escuelas_por_1000_hab = cantidad/(pob_2010/1000))
Levanto y joineo el mapa de comunas_caba para poder graficar el coroplético
comunas_caba <- st_read("data/comunas_caba.geojson",
stringsAsFactors = TRUE, #Carga strings como categorías
options = "ENCODING=latin1") %>%
mutate(comuna = COMUNAS)
## options: ENCODING=latin1
## Reading layer `comunas' from data source
## `/home/maxi/Escritorio/PosgradoFlacso/Proyectos/EstablecimientosEducativos/R-ProyectoCsDatos2/data/comunas_caba.geojson'
## using driver `GeoJSON'
## Simple feature collection with 15 features and 6 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
cant_escuelas_est_priv_comunas <- st_join(comunas_caba, cant_escuelas_est_priv_comunas)
Grafico mapa coroplético facetado por estatales y privadas
ggplot()+
geom_sf(data=cant_escuelas_est_priv_comunas, aes(fill=escuelas_por_1000_hab))+
scale_fill_distiller(palette = "RdYlGn", direction = 1)+
facet_wrap(~est_priv)+
labs(title= "Cantidad de escuelas de gestión Estatal/Privada",
subtitle = "Por cada 1000 habitantes por Comuna",
fill="")